<?php

/**
 * 狡兔之服务端 模拟：web service
 * 来源：狡兔三窟，说明兔子行动最谨慎。
 * User: sgfoot
 * Date: 2017/3/20
 * Time: 10:33
 */
class CoonServer
{
    private $key = 'zw9iurtzonhyoymdklnrcuecgk588cdq';//设置密钥
    private $second = 30;//过期时间

    /**
     * 是否已经开启
     * @author: wzl
     * @date: 2017
     * @return bool
     */
    public function isOpen()
    {
        $coon = new CoonBase();//实例基础
        $json_result = $coon->getRequest();//获取curl请求的数据，即setData设置的数据
        $data = $coon->toArray($json_result);//将json转换成array
        if (!isset($data['open']) || !$data['open']) {
            return false;
        }
        return true;
    }
    /**
     * 接受请求的数据
     * @return boolean|array false则是签名错误,非false则是请求的数据
     */
    public function receive()
    {
        $coon = new CoonBase();//实例基础
        $coon->setKey($this->key);//设置key
        $json_result = $coon->getRequest();//获取curl请求的数据，即setData设置的数据
        $data = $coon->toArray($json_result);//将json转换成array
        //判断时间是否过期
        if(!isset($data['time']) || (intval($data['time']) + $this->second) < time()) {
            return $this->setResult(400, '时间过期');
        }
        $makeSign = $coon->makeSign();//将数组重新计算一次sign
        if($makeSign != $data['sign']) {
            return $this->setResult(401, '签名错误');
        }
        return $this->setResult(0, $result = $coon->getData());//此数据则是setData设置的数据
    }
    /**
     * 设置标准的返回结果
     * @param $status int 代码0成功，非0错误号
     * @param $msg string 提示信息
     * @param bool $isJson 默认false,是否json
     * @author: wzl
     * @date: 2017
     * @return array|mixed|string
     */
    protected function setResult($status, $msg, $isJson = false)
    {
        $result = array(
            'status' => $status,
            'msg' => $msg,
        );
        return $isJson ? json_encode($result) : $result;
    }
}